package hello

import (
	"fmt"
)

//iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前)，const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
//iota 可以被用作枚举值：
/*
const (
	a = iota
	b = iota
	c = iota
)
const (
    a = iota
    b
    c
)
可简写为
*/
const (
	enum1 = iota
	enum2
	enum3
	enum4
	enum5
)

const (
	enum21 = iota // 0
	enum22        // 1
	enum23 = "hh" // hh: 独立值 iota +1
	enum24        // hh  iota+1
	enum25        // hh
	enum26        // hh
	enum27 = 100  // 100
	enum28        // 100
	enum29        // 100
	enum30 = iota //9 恢复计数
	enum31        //10
)

// 常量还可以用作枚举：
const (
	Unknown = 0
	Female  = 1
	Male    = 2
)

func EnumTest1() { // comment test
	fmt.Println("------------ Enum Test() -------------- start.") // 向 stdout 输出

	fmt.Println("enum:", enum1, enum2, enum3, enum4, enum5)

	fmt.Println("enum2:", enum21, enum22, enum23, enum24, enum25, enum26, enum27, enum28, enum29, enum30, enum31)

	//iota 表示从 0 开始自动加 1，所以 i=1<<0, j=3<<1（<< 表示左移的意思），即：i=1, j=6，这没问题，关键在 k 和 l，从输出结果看 k=3<<2，l=3<<3。
	const (
		i = 1 << iota
		j = 3 << iota
		k
		l
	)
	fmt.Println("i=", i)
	fmt.Println("j=", j)
	fmt.Println("k=", k)
	fmt.Println("l=", l)

}
